Arcadian, Volume 1, Issue 09

OCR'ed and cleaned up
by Richard C. Degler
on March 1, 2011
[note: _underscore_]


------------------------- [arcadian Vol. 1, Issue 09] -------------------------
Page 69 - [originally at the bottom.]

VOLUME I                       August 18, 1979                 Number 9

_PROGRAMMABLE KEYBOARD STATUS_ A meeting of the FCC is scheduled around
Sept. 15, at which time the TI petition will be discussed.  Bally currently
feels that regardless of the decision, they will not be able to have a
keyboard in production by the end of the year.

_SURVEY_ The subscriber survey has resulted in a fair turnout of responses
from those interested in a keyboard/memory addition, and a number of useful
suggestions as well.  What is evolving now is a unit that could have 16K of
RAM that would accept a cassette input of the operating program, be it BASIC,
COBOL, FORTRAN, or whatever (your choice) which would be loaded in about
two minutes at 1200- baud (while the picture tube was warming up), plus an
additional 8 or 16 K of onboard RAM for the user's programs.  There would be
space to add more RAM by chip insertion (especially the 8K version), plus
connectors to allow outside memory addition.  Serial and parallel ports
would be available for the addition of other peripherals.  Those who
responded to the survey will be kept up to date.

_BLACK BOX_ enclosed is a sort of Battleship game where the computer hides
some "atoms" in a grid and you have to locate them.  Use the diagram for clues.

_TUTORIAL ON SOUND_ adds more material from Chuck Thomka to last issue's
discourse.

_SLOT MACHINE CORRECTION_ requires the addition of a comma to the very end of
line 1515 to stop the scrolling.

_BIG LETTERS_ continue to interest subscribers.  Dennis Sprague modified the
pg. 45 program to write double size letters on command - the poke-ing is done
automatically.  Refer to the program on pg. 45 and retain lines 9 thru 60, and
line 120.  Replace the rest with:
                             65 A = 20190
                             70 K = KP
                             80 IF K = 13 GOTO 100
                             90 %(A) = K; A = A+1; GOTO 70
                            100 %(A) = 0
                            105 CLEAR
                            110 CALL (B); GOTO 65
Dennis writes "65 starts the display area, 100 shuts off the display if a zero
is encountered.  The ASCII values of K get poked into the display area 8 bits
at a time."

With the above, enter and RUN the program.  Then just key in whatever letter,
number, character that you wish to see, punch GO, and there it is, twice as
big as life.

_AMERICAN CONCERT FREQUENCIES_ chart has been prepared by Robert Hood, along
with the closest Bally frequency: (all in Hertz)
    Note     Standard     Bally               Note     Standard     Bally
     C        261 .7       262                 G        392          392
     C#       277.3        277                 G#       415.2        415
     D        293.7        294                 A        440          440
     Eb       311.1        311                 Bb       466.1        466
     E        329.7        330                 B        493.9        494
     F        349.2        349                 C        523.3        524
     F#       370.1        370

In addition, Bob has furnished a program based on the equations of pg. 64 to
solve for frequencies or tone register values, and this is found on pg. 70.

-------------------------------- arcadian -------------------------------------
Page 70 -

BANGMAN CORRECTION COMMENT by Ernie Sams indicates that perhaps Rory Wahl has
a defective logic chip if Rory's correction in the last issue is needed to
make the program work. Ernie writes:
"Rory suggests that the line should read:
      2000 E=E+1; IF E=9 GOTO 9000; IF Q[not equal to]1 GOSUB 9600+(Ex10)
Q is a flag that is set to either 0 or 1.  If it is set to 0 it sends the
program to the man drawing routine at 9600, 9610, 9620, etc.
E is a counter that is to be incremented ONLY if the guess is wrong.  It is NOT
to be incremented if the guess is correct or if the letter has been previously
used.  So the portion of the program line, E=E+1, must follow the IF statement.
Now, if the 'IF' portion of the IF E=9 GOTO 9000 statement is not satisfied
the program defaults to the next numbered program line.  The way Rory proposes,
E would be incremented each time a guess is made, right or wrong.  The program
would never reach the man drawing routine statement because it can't go past
the first IF statement until E=9 at which time the program goes to 9000, draws
the gun and shoots the man that never gets drawn on the screen.
So line 2000 MUST remain exactly as was originally written or the program will
not work as intended:
     2000 IF Q[not equal to]1 GOSUB 9600+(Ex10); E=E+1; IF E=9 GOTO 9000

I have included all of Ernie's discourse as I felt that it would be of interest
as a tutorial in why things are done in a certain way.

BOB HOOD's program to convert frequencies to register values and vica versa:

[FREQUENCIES Converter program listing by Bob Hood - did not scan]

-------------------------------- arcadian -------------------------------------
Page 71 -

_TUTORIAL - SOUND SYNTHESIZER, Part 2_ by chuck Thomka [OCR'ed by Adam Trionfo]

     Whenever RESET is pushed, the &(16) to &(23) registers are set to fixed
values. (This sort of thing is called DEFAULT)  This also happens at POWER TURN
ON.  &(16) is set to 71, and &(17) through &(23) are set to zero.

     Since pushing most keys on the keypad will generate a sound, one of the
voices must be used.  This means that since most keys have unique tones when
pushed, they must be loading unique values into one or more of the registers.
The voice used is the 'A' counter.  Each key, when pushed, puts a value into
the &(17) register that the 'A' counter will count up to.  It will also put
value 15 into the &(22) register, that will adjust the 'A' volume to its
maximum so that the resultant frequency can be heard.  At the end of the time
of outputting the tone, the &(17) and &(22) are both put back to zero.

     At anytime that the computer is stopped, the &(16) register will be set to
71, and &(17) and &(22) will be set to zero.  This may affect some results of
sound effects in programs where you want those registers to be left at some
other values.  All the other registers will be as they were last adjusted to,
so remember this if you still have a tone or noise remaining after the computer
has stopped.

     Later in this article is a table of all the sound generating keys, their
&(17) values, the resultant frequencies, and any special notes about them
(pg. 73).

     The keys that do not generate sounds are [divide], x, +, and -.  These
keys will modify the sounds created by the other keys if the modifying keys
are used just prior to the normal sound keys.

     The divide key ([division symbol]) will make the sound one octave lower
in frequency than normal.  This is done by temporarily making the master
counter &(16) count twice as far.  So while &(16) is normally at 71, for this
one note it will be set to 143.  As soon as the note has finished, &(16) will
again return to 71 unless the next note is also proceeded by a [divide sign].

     The multiply key (x) will make the sound one octave higher in frequency.
This is done by making &(16) equal 35 for the time the concerned note is
sounding at the end of which the &(16) will again return to 71.

     The plus (+) and minus (-) keys are only used in conjunction with the
numbers 1 through 7.  This was arranged so that the plus and minus sign would
be meaningful in playing musical sharps or flats in the Bally-mentioned three
octave musical scale.

     Another thing to mention is the "Note Timer" or NT.  For each number of NT
the notes played will be approximately 17 milliseconds long.  An NT=0 results
in no sound, while the maximum value of NT>255 results in about a 4.335 second
note. (0.017 x 255 = 4.335)

     The 0 is used to extend the duration of a played note by taking the note
timer and increasing it an additional NT quantity for each 0 following the note
to be heard.  For example, say we are to play a note while NT=10, and that this
note is followed by 3 zeros, the resultant NT will be 40.  After playing that
modified NT, the NT will again return to normal (10 in this example) until
called upon again.

     A funny thing about this method of extending the duration of a played note
is that you still cannot play any note longer than 4.335 seconds.  This is
because if you had a note timer extended by way of using zeros after a printed
character, and it would result in an NT>255, the final result would probably be
less than 255.  To explain what I mean, you have to know about binary numbers
and that the NT register is only 8 bits wide.  If, for example, we had an NT of
50 and that some program that we are running is to print a character followed
by 5 zeros, we would expect a temporary NT result of 300 (1+5=6, 6x50=300) but
an 8 bit register's maximum bit count is only 255 while a binary conversion of

-------------------------------- arcadian -------------------------------------
Page 72 - [...continued]

decimal 300 requires 9 bits (1 0010 1100).  The result is that only the least
8 bits (0010 1100) will be loaded into the NT register, so NT will temporarily
be 44.  This you see is a lot shorter than we had at first expected and even
shorter than the normal NT of 50.

_TUTORIAL-SUBROUTINES_
     If you have a process that you want to have repeated a number of times, it
is convenient and memory-saving to use the technique called SUBROUTINE, which
requires the commands GOSUB and RETURN. I recently received a short program
from Bret Dabel and Vince Garzoli that has this situation, and I thought that
it might be of interest to all to show how a program can be modified this way.
The program as it arrived is:

     10 A=RND(32000)                      To utilize the SUBROUTINE
     20 INPUT "PLAYER #1 GUESS:" B        command, we make the process
     30 IF A=B PRINT B, "Is RIGHT"        to be repeated into a set of
     40 IF A>B PRINT "MORE"               generalized statements and
     50 IF A<B PRINT "LESS"               them with the RETURN command.
     60 INPUT "PLAYER #2 GUESS:" B        Then whenever you wish to
     70 IF A=B PRINT B, "Is RIGHT"        perform the process, you
     80 IF A>B PRINT "MORE"               direct the machine to the
     90 IF A<B PRINT "LESS"               proper location with the GOSUB
    100 INPUT "PLAYER #3 GUESS:" B        command, and when the machine
    110 IF A=B PRINT B, "Is RIGHT"        does its job, it reads RETURN
    120 IF A>B PRINT "MORE"               which tells it to go back to
    130 IF A<B PRINT "LESS"               where it left the main program
    140 INPUT "PLAYER #4 GUESS:" B        and pick up the next line
    150 IF A=B PRINT B, "Is RIGHT"        number.  This last statement
    160 IF A>B PRINT "MORE"               is quite important.
    170 IF A<B PRINT "LESS"
    180 IF A=B GOTO 10                    As an example, lets review the
    190 GOTO 20                           Guessing Game program.  We see
                                          that the A and B comparisons
occur four times and so we can make a subroutine of them, giving them a set of
line numbers away from the main program, as:  500 IF A = B PRINT B,"IS RIGHT"
                                              510 IF A>B PRINT "MORE"
                                              520 IF A<B PRINT "LESS"
                                              530 RETURN

The program then reads:                   If by chance you have written the
                                          subroutine at lines 500-530 but later
     10 A=RND(32000)                      you have added so much program that
     20 INPUT "PLAYER #1 GUESS" B         500-530 will be buried in the program
     30 GOSUB 500                         length, you will have a problem.
     40 INPUT "PLAYER #2 GUESS" B         As the computer completes line 490,
     50 GOSUB 500                         it will search for the last value of
     60 INPUT "PLAYER #3 GUESS" B         A and B and perform the comparisons
     70 GOSUB 500                         asked for in lines 500 through 520
     80 INPUT "PLAYER #4 GUESS" B         (would you want that, then? ) but it
     90 GOSUB 500                         will HOW? when it gets to 530 because
    100 IF A=B GOTO 10                    it is not in a subroutine mode and
    110 GOTO 20                           has no place to return to.  To avoid
    500 IF A=B PRINT B, "IS RIGHT"        this, you jump around the subroutine,
    510 IF A>B PRINT "MORE"               in our case with a 490 GOTO 540.
    520 IF A<B PRINT "LESS"               Since this is a legitimate operation,
    530 RETURN                            it means therefore that the
                                          subroutine could actually be placed
anywhere within the program, and a suitable jump statement added.  Nesting of
subroutines is possible.  By this we mean that once you have gotten into the
subroutine loop, you could have another subroutine called.  The machine would
perform the second subroutine and RETURN to the next line number of the first
subroutine, and on its completion, go back to the main program. I believe that
four such 'nests' are possible in the Bally BASIC, but one has to be very care-
ful that each subroutine loop is completed - there cannot be any open loops.
Diagramatieally, the guessing game looks like this:
         10   > 500    > 40  > 500    > 60  > 500    > 80  > 500    > 100 -> 10
         20  /  510   /  50 /  510   /  70 /  510   /  90 /  510   /  200 -> 20
         30 /   520  /         520  /         520  /         520  /
                530 /          530 /          530 /          530 /

-------------------------------------------------------------------------------
Page 73 - [RESULTANT FREQUENCY chart - sideways, did not scan]

-------------------------------------------------------------------------------
Page 74 - [BLACK BOX listing by B. Reany - did not scan]

[Cleaned up BLACK BOX diagram - which had errors]          +^    ^   o
                                                    +--+--+||+--+|-+-|+--+--+
                                                    |  |  ||||  |\---+-------o
                                                    +--+--+\/+--+--+-|+--+--+
[Generic BB rules, may not apply here :]          - --->[]|  |[]|  | ||  |  |
                                                    +--+--+--+--+--+-|+--+--+
                                                    |  |  |  |[]|  | ||  |  |
[Rays from o to > went straight through]            +--+--+--+--+--+-|+--+--+
[... or were bounced around for a while]            |[]<----\|  |/---+-------o
                                                    +--+--+-|+--+|-+-|+--+--+
                                                  + -. |  | ||  || | ||  |  |
[Rays from + to > were reflected to same spot]      /--+--+-|+--+|-+-|+--+--+
                                                   L|  |  | ||  || | ||  |[]|
[Rays from -'s get absorbed and never return]       +--+--+-|+--+|-+-|+--+-^+
                                                 - ---------/|  |\---+--\| ||
[Scoring: 1 point per Ray, 5 for wrong guess]       +--+--+--+--+--+-|+-|+-|+
                                                    |  |  | .|[]|  | || || ||
[Lowest score wins, so don't just shoot all!]       +--+--+/|+--+--+-|+-|+-|+
                                                          L +        v  v  -

     BLACK BOX RULES:

  An 8 by 8 grid has a predetermined number of atoms hidden, one per square,
under the grid squares. Berthold rays will be generated after you select a
ray entry point after pressing the "1" key.  Rays travel in straight lines
perpendicular to the grid edge, starting from the ray entry point, until they
are absorbed or exit from the grid. They obey the following rules:
     1. A ray entering the grid on either side of an atom on the edge of the
grid is deflected backward and away from the edge atom.
     2. A ray aimed between two atoms with an open square between them is
reflected back upon its path.
     3. A ray coming within one square diagonally of an atom is deflected away
90 degrees from that atom.
     4. A ray colliding with an atom will be absorbed, and its absorption
will be signaled upon the screen
     5. A ray emerging from the grid will signal its exit point.

  The "2" key will ask for a col (0 to 7) and row (10 to 17) and will either
mark or unmark the grid position at their intersection where you suspect an
atom is located.  The "3" key will display the grid points where the atoms
were located, those which you marked as having atoms, and will grade your
guesses, and clear the grid for the next game.  The zero key will restart the
game, but if the grid was not cleared with the "3" key, the preceding grid
atoms will not he cleared.
  After this program is loaded, the direct executed "PRINT SZ" command must
print at least 200, or the program strings will be insufficient to execute.
For this reason, closing quote marks on literals, as well as several obvious
input edits, have been deleted.

  This program is unconditionally guaranteed by the author to to smack up
against your core limitation, or double your core dumps back.

                                                Thank You
                                                 B. Reany
                                                 1106 E. Julia Dr.
                                                 Perry, Fl 32347

Wayne Dunning notes that BLACK BOX should have a comma in line 145 after the
first B and in front of the semicolon.  Bob Strand indicates that line 490
should have a M=-1 instead of M=-M.

-------------------------------- arcadian -------------------------------------
Page 75 -

_POKE-ING PROGRAM_ allows you to load machine instructions into the @ string,
which means that you can call several machine language subroutines from inside
the BASIC.  Developed by George Breadon, the program follows along with some
data to be inserted that will call up our old buddy, ARCADIAN (ref.pg. 45)

       5 NT = 0
      10 A = 20180; B=A; FOR K=0 TO 13              INPUT MACHINE INSTRUCTIONS
      20 INPUT @(K); NEXT K                         INTO @ STRING
      30 FOR K = 0 TO 13; CLEAR
      40 CY = 0;PRINT K,@(K)                        EDIT ROUTINE - HIT "STEP"
      50 D = KP; IF D=31 GOTO 80                    KEY (D=57) TO STEP THRU
      60 IF D=57 GOTO 90                            MACHINE INSTRUCTIONS.
      70 GOTO 50                                    HIT ERASE KEY (D=31) TO
      80 INPUT "CHANGE=",L;@(K)=L                   CHANGE MACHINE INSTR.
      90 NEXT K
     100 A-B; FOR K= 0 TO 13                        POKE @STRING INTO MEMORY
     110 %(A)=@(K); A=A+2: NEXT K
     120 IF @(20) = 8 GOTO 30                       HIT "GOTO" KEY TO BRANCH
     130 C=20180; GOSUB 160                         BACK T0 EDIT ROUTINE AT
     140 C=20190; GOSUB 160                         ANY TIME
     150 GOTO 120
     160 CLEAR; CALL (C); RETURN                    INITIALIZE STARTING ADDRESS
                                                    FOR SUBROUTINE 52
DATA to be inserted: This is all in machine
                     level code.                    CALL SUBROUTINE 52
   @(0) =    -43             @(7) =   27672
     1     12341               8      20200
     2     19480               9     -13871         @ 0 thru 4 go into 20180
     3      3164 Or 3159      10      21057         while @ 5 thru 13 go into
     4    -13871              11      16707         20190, two at a time
     5       -43              12      18756
     6        53              13      20033

_SOFTWARE PRODUCERS_ are invited to contact VIDEO CONCEPTS at 625 W. 53 Ave,
Anchorage Alaska, 99502, for distribution of their products thru the store
up in the cold country.

_RETURNED BALLY UNITS_ are available from V. Jupe, Star Route Box 60, Carlotta,
CA. 95528  These are working, and at less than $200.  Also some games, write.

_ADS_ start here this time:

SELL ARCADE with 4 controls, BASIC cassette and interface. BLACKJACK, BASEBALL,
RED BARON, CROSSWORDS.  Interface has jack for printer.  Reasonable Offer to
Bob Schwind 12311 W. Silver Spring Dr., Milwaukee, WI 53225 (414) 367-4804

-------------------------------------------------------------------------------
Page 76 -

_ADS_
     SELL  ARCADE complete, includes PANZER ATTACK,CLOWNS,ESCAPE,FOOTBALL,
     BASEBALL,BINGO MATH,LETTER MATCH, BLACKJACK,ETC., BASIC and CASSETTE
     INTERFACE.  Total original list price $560.  First certified check for
     $400, or best offer.  B. PERLSON 6400 N.ELM TREE RD., MILWAUKEE WI, 53217
     414-352-1331

     Quality games on C-10 cassettes: STARBLASTER (2 player spacewar) and
     HAMMURABI (you control ancient Sumeria) at $7. each, both for $12.
     Dan. Pierce 229 Orville St. Apt 1, Fairborn OH 45324

     LISTING for the game SUB SEARCH, a one-player item, at $1.25
     Marc Gladstein, 1213 1/2 S. ALFRED ST, Los Angeles CA 90035 (213)658-5804

     Available through Sebree's Computing 456 Granite Ave., Monrovia CA 91016
     Games: $3.95 - UFO BATTLE, HIT THE PEDESTRIAN, SUBMARINE MINEFIELD;
     $2.95 - MUNCH!;  $5.50 - DOWN THE TRENCH;  $8.95 - **SUPER WUMPUS**;
     $2.50 - MATH ROUTINES (calculates Sine,Cosine,Arctangent, & Square Root!).
     All programs with one page of documentation/instructions.  Send for
     descriptions.  Timothy Hays.

     A note from W&W Software that they have another cassette ready.

     SELL Bally ARCADE BPA 1100 with BASIC,FOOTBALL,BASEBALL, four other
     cassettes, tape interface $275.  Geo. Evanoff, 10028 N.E. 28th Place,
     Bellevue WA 98004  (206)827-2918

     One player game called SUBSEARCH, $1.25 for listing, only.
     Marc Gladstein, 1213 1/2 S. Alfred St. Los Angeles CA 90035 (213)658-5804


_REVIEW_ of programs has been suggested by some subscribers, who are
concerned about purchasing a 'pig in a poke'.  IF someone else is willing to
do a critical review of a program that some advertiser is also willing to
submit, I will get the two parties together and accept the review for
publication.  The opinions will be the reviewers, not mine.

_ _ _ _ _ _ _ _ _ _ _ _ _ _ [fold on the dotted line] _ _ _ _ _ _ _ _ _ _ _ _ _

ARCADIAN                                          [Place US postage stamp here]
Robert Fabris, stamp licker [demotion]
3626 Morrie Dr.
San Jos, CA 95127

          ===========
          First Class             To: [Address label goes here]
          ===========

------------------------------ [end of Issue 09] ------------------------------
